package cn.getech.data.development.service;

import cn.getech.data.development.constant.PermissionTypeEnum;
import cn.getech.data.development.entity.permission.InitPermission;
import cn.getech.data.development.entity.permission.SysRoleDataPermission;
import cn.getech.data.development.entity.permission.SysTenantDataPermission;

import java.util.List;

public interface DataPermissionService  {
    /**
     *批量保存 数据权限
     * @param permissionList 权限列数据
     */
    void savePermission(List<SysRoleDataPermission> permissionList);

    /**
     *批量保存 租户数据权限
     * @param permissionList 权限列数据
     */
    void saveTenantPermission(List<SysTenantDataPermission> permissionList);

    /**
     *根据数据id批量删除 租户数据权限
     * @param dataId 数据id
     */
    void deleteTenantPermission(Integer dataId,Integer dataType);

    /**
     *
     * @param id 数据id
     * @param dataType  数据类型 {@link PermissionTypeEnum#RESOURCE}
     * @param operation 操作类型 {@link PermissionTypeEnum#QUERY}
     * @return true  false
     */
    boolean checkDataPermission(Integer id,Integer dataType,Integer operation);

    /**
     * 检查离线申请权限
     * @param id 数据id
     * @param operation 操作类型 {@link PermissionTypeEnum#QUERY}
     * @return true  false
     */
    boolean checkApplyPermission(Integer id,Integer operation);

    /**
     * 检查实时表申请权限
     * @param id 数据id
     * @param operation 操作类型 {@link PermissionTypeEnum#QUERY}
     * @return true  false
     */
    boolean checkApplyRealPermission(Integer id,Integer operation);
    /**
     *
     * @param ids 数据id
     * @param dataType  数据类型 {@link PermissionTypeEnum#RESOURCE}
     * @param operation 操作类型 {@link PermissionTypeEnum#QUERY}
     * @return true  false
     */
    boolean checkDataPermission(List<Integer> ids,Integer dataType,Integer operation);


    /**
     * 初始化最初权限
     * @param id 数据id
     * @param dataType  数据类型 {@link PermissionTypeEnum#RESOURCE}
     * @param userId 用户id
     */
    void initDataPermission(Integer id,Integer dataType,Integer userId,Long roleId);

    void initPermission(List<InitPermission> dataList);

    void saveOrUpdatePermission(List<Long> dataIds,Long roleId);
}
